์์ฑ: 2026-03-04 04:03:38์์ : 2026-03-04 04:03:38
์ฌ๋ฐ๋ฅธ ๋ก๊น ์ ๋ต: SLF4J์ Logback์ผ๋ก ์ด์ ํ๊ฒฝ ๋ชจ๋ํฐ๋งํ๊ธฐ
System.out.println()์ ๊ฐ๋ฐ ๋จ๊ณ์์ ํธ๋ฆฌํ์ง๋ง, ์ค์ ์๋น์ค ์ด์ ํ๊ฒฝ์์๋ ์ ๋ ์ฌ์ฉํด์๋ ์ ๋ฉ๋๋ค. **๋ก๊น
(Logging)**์ ์๋ฒ์ ์ํ๋ฅผ ๊ธฐ๋กํ๊ณ ์ฅ์ ๋ฐ์ ์ ์์ธ์ ํ์
ํ๋ ๊ฐ์ฅ ๊ฐ๋ ฅํ ๋ฌด๊ธฐ์
๋๋ค.
1. ์ ๋ก๊น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์จ์ผ ํ ๊น?
- ์ฑ๋ฅ: ๋ก๊ทธ ์ถ๋ ฅ ์ฌ๋ถ๋ฅผ ์ ์ดํ ์ ์์ด ์ฑ๋ฅ ์ ํ๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
- ํ์ผ ๊ด๋ฆฌ: ๋ก๊ทธ๋ฅผ ํ์ผ๋ก ์ ์ฅํ๊ณ , ๋ ์ง๋ ์ฉ๋๋ณ๋ก ์๋์ผ๋ก ๊ด๋ฆฌ(Rolling)ํ ์ ์์ต๋๋ค.
- ๋ค์ํ ๋ ๋ฒจ: ๋ก๊ทธ์ ์ค์๋์ ๋ฐ๋ผ ์ถ๋ ฅ์ ์กฐ์ ํ ์ ์์ต๋๋ค.
2. ๋ก๊ทธ ๋ ๋ฒจ (Log Levels)
์คํ๋ง ๋ถํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์ 5๊ฐ์ง ๋ ๋ฒจ์ ์ ๊ณตํฉ๋๋ค. (์ค๋ฅธ์ชฝ์ผ๋ก ๊ฐ์๋ก ์ค์๋๊ฐ ๋์)
TRACE < DEBUG < INFO < WARN < ERROR
- INFO: ์์คํ ์ด์์์ ์ผ๋ฐ์ ์ธ ์ ๋ณด (๊ธฐ๋ณธ๊ฐ).
- WARN: ์ ์ฌ์ ์ธ ์ํ ์ํฉ. ๋น์ฅ ๋ฌธ์ ๋ ์์ง๋ง ์ฃผ์ ๊น๊ฒ ๋ด์ผ ํ ๋.
- ERROR: ์ฌ๊ฐํ ๋ฌธ์ ๋ฐ์. ์ฆ๊ฐ์ ์ธ ์กฐ์น๊ฐ ํ์ํ ์ํ.
- DEBUG: ๊ฐ๋ฐ ๋จ๊ณ์์ ์์ธํ ์ ๋ณด๋ฅผ ํ์ธํ๊ณ ์ถ์ ๋.
3. ์ค๋ฌด ๋ก๊น ์ค์ (logback-spring.xml)
๋ก๊ทธ์ ์ถ๋ ฅ ํ์์ ์ง์ ํ๊ณ , ๋งค์ผ๋งค์ผ ๋ก๊ทธ ํ์ผ์ ์๋ก ์์ฑํ๋๋ก ์ค์ ํ๋ ์์์ ๋๋ค.
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory> <!-- 30์ผ๊ฐ ๋ณด๊ด -->
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="FILE" />
</root>
</configuration>4. ์ฌ๋ฐ๋ฅธ ๋ก๊ทธ ์์ฑ ์ต๊ด
- ์๋ฏธ ์๋ ์ ๋ณด ๊ธฐ๋ก: "์๋ฌ ๋ฐ์" ๋์ "User ID [123] ๊ฒฐ์ ์คํจ: ์์ก ๋ถ์กฑ"์ฒ๋ผ ๊ตฌ์ฒด์ ์ผ๋ก ์ ์ผ์ธ์.
- ๋ฐ์ดํฐ ์ํธํ: ๊ฐ์ธ์ ๋ณด(๋น๋ฐ๋ฒํธ, ์นด๋๋ฒํธ ๋ฑ)๋ ์ ๋๋ก ๋ก๊ทธ์ ๋จ๊ธฐ์ง ๋ง์ธ์.
- ์ ์ ํ ๋ ๋ฒจ ์ ํ: ๋ฃจํ ์์ ์ฆ์ ์ถ๋ ฅ์
DEBUG, ์ค์ํ ๋น์ฆ๋์ค ํ๋ฆ์INFO๋ฅผ ์ฌ์ฉํ์ธ์. - ์์ธ ์คํ ํธ๋ ์ด์ค:
log.error("์๋ฌ ๋ฐ์", e);์ฒ๋ผ ์์ธ ๊ฐ์ฒด๋ฅผ ํจ๊ป ๋๊ฒจ ์คํ ์ ๋ณด๋ฅผ ๋จ๊ธฐ์ธ์.
5. ๊ฒฐ๋ก
๋ก๊ทธ๋ **"๋ฏธ๋์ ๋๋ฅผ ์ํ ๋ฉ์์ง"**์ ๋๋ค. ์๋น์ค์ ๋ฌธ์ ๊ฐ ์๊ฒผ์ ๋, ๊ณผ๊ฑฐ์ ๋ด๊ฐ ์ ์ฑ๊ป ๋จ๊ธด ๋ก๊ทธ๊ฐ ๊ฐ์ฅ ๋จผ์ ๊ธธ์ ์๋ดํด ์ค ๊ฒ์ ๋๋ค.